package com.qf.filter;

import com.qf.pojo.User;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author 汤奇
 * @version V1.0
 * @Project BookPro
 * @Package com.qf.filter
 * @Description: 鉴权过滤器, 判断消费者是否登录
 *               拦截所有请求, 判断Tomcat的session中是否有用户对象信息
 *               如果有, 放行
 *               如果没有, 说明用户未登录, 重定向到登录页面, 重新登录
 * @Date 2022/5/23 10:09
 */
@WebFilter("/*")
public class PermFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request1, ServletResponse response1, FilterChain chain) throws IOException, ServletException {
        //1.判断用户的访问路径
        HttpServletRequest request = (HttpServletRequest)request1;
        HttpServletResponse response = (HttpServletResponse) response1;

        //获取到用户的访问路径
        String uriStr = request.getRequestURI();
//        System.out.println("====uriStr===="+uriStr);
        //2.判断用户路径, 放行所有静态资源, 放行用户登录的路径, 放行用户注册,首页,商品查询等路径
        //判断路径的扩展名, 如果是js文件放行, 因为js文件和jsp文件相差一个字母, 使用contains无法判断
        if (uriStr.contains("/login")
            || uriStr.contains(".css") || uriStr.contains(".jpg")
            || uriStr.contains(".png") || uriStr.contains(".gif")
            || uriStr.contains(".eot") || uriStr.contains(".svg")
            || uriStr.contains(".ttf") || uriStr.contains(".woff")
            || uriStr.contains(".woff2") || uriStr.endsWith(".js")
            || uriStr.contains("/code") || uriStr.contains("/user")
            || uriStr.contains("/register") || uriStr.contains("/admin")
            || uriStr.contains("/type") || uriStr.contains("/goods")
            || uriStr.contains("/index") || uriStr.contains("/cart")
        ){
            //放行
            chain.doFilter(request1,response1);
            return;
        }
        //3.获取会话session对象
        //4.判断会话中是否有消费者用户的对象信息
        User user = (User) request.getSession().getAttribute("loginUser");

        if (user != null){
            //5.有放行
            chain.doFilter(request1,response1);
        } else {
            //6.没有, 让用户重定向到消费者登录页面重新登录
            response.sendRedirect("/login.jsp");
        }

    }

    @Override
    public void destroy() {

    }
}
